home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 November: Tool Chest / Dev.CD Nov 00 TC Disk 1.toast / Sample Code / Devices and Hardware / Drivers / TradDriverLoaderLib / TestTradDriverLoader.p < prev    next >
Encoding:
Text File  |  2000-09-28  |  6.9 KB  |  254 lines  |  [TEXT/CWIE]

  1. program TestTradDriverLoaderLib;
  2. (*
  3.     File:        TestTradDriverLoaderLib.p
  4.     
  5.     Description:Pascal program to test TradDriverLoaderLib.
  6.  
  7.     Author:        Quinn
  8.  
  9.     Copyright:     Copyright: © 1996-1999 by Apple Computer, Inc.
  10.                 all rights reserved.
  11.     
  12.     Disclaimer:    You may incorporate this sample code into your applications without
  13.                 restriction, though the sample code has been provided "AS IS" and the
  14.                 responsibility for its operation is 100% yours.  However, what you are
  15.                 not permitted to do is to redistribute the source as "DSC Sample Code"
  16.                 after having made changes. If you're going to re-distribute the source,
  17.                 we require that you make it clear in the source that the code was
  18.                 descended from Apple Sample Code, but that you've made changes.
  19.     
  20.     Change History (most recent first):
  21.                 6/24/99    Updated for Metrowerks Codewarror Pro 2.1(KG)
  22.  
  23. *)
  24.     uses
  25.         Types,
  26.         LowMem,
  27.         Files,
  28.         Devices,
  29.         
  30.         TradDriverLoaderLib;
  31.         
  32.     procedure CheckTestResult(err : OSErr; mesg : Str255);
  33.     begin
  34.         if err = noErr then begin
  35.             writeln('  Passed ', mesg, '.');
  36.         end else begin
  37.             writeln('  •••Failed ', mesg, ' with error ', err:1, '.');
  38.         end; (* if *)
  39.     end; (* CheckTestResult *)
  40.     
  41.     procedure CheckTestResultBool(b : Boolean; mesg : Str255);
  42.     begin
  43.         if b then begin
  44.             writeln('  Passed ', mesg, '.');
  45.         end else begin
  46.             writeln('  •••Failed ', mesg, '.');
  47.         end; (* if *)
  48.     end; (* CheckTestResultBool *)
  49.  
  50.     procedure TestTradHighestUnitNumber;
  51.     begin
  52.         writeln('TestTradHighestUnitNumber');
  53.         writeln;
  54.         CheckTestResultBool( TradHighestUnitNumber = (LMGetUnitTableEntryCount - 1) , 'check against LMGetUnitTableEntryCount');
  55.     end; (* TestTradHighestUnitNumber *)
  56.     
  57.     procedure TestInstallOpenRemove;
  58.         var
  59.             err : OSErr;
  60.             rsrcName : Str255;
  61.             refNum : DriverRefNum;
  62.             cpb : CntrlParam;
  63.     begin
  64.         writeln('TestInstallOpenRemove');
  65.         writeln;
  66.         
  67.         (* Install *)
  68.         rsrcName := '.Test';
  69.         err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  70.         CheckTestResult(err, 'install');
  71.         
  72.         (* Open *)
  73.         if err = noErr then begin
  74.             err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  75.             CheckTestResult(err, 'open');
  76.         end; (* if *)
  77.         
  78.         (* Functional *)
  79.         if err = noErr then begin
  80.             cpb.ioCRefNum := refNum;
  81.             cpb.csCode := 666;
  82.             err := PBStatusSync(@cpb);
  83.             CheckTestResult(err, 'status call');
  84.         end; (* if *)
  85.         if err = noErr then begin
  86.             CheckTestResultBool(cpb.csParam[0] = refNum, 'results from status call');
  87.         end; (* if *)
  88.         
  89.         (* Remove *)
  90.         if err = noErr then begin
  91.             err := TradRemoveDriver(refNum, false);
  92.             CheckTestResult(err, 'remove');        
  93.         end; (* if *)
  94.  
  95.         writeln;
  96.     end; (* TestInstallOpenRemove *)
  97.  
  98.     procedure TestGestaltCalls;
  99.         var
  100.             rsrcName : Str255;
  101.             err : OSErr;
  102.             refNum : DriverRefNum;
  103.             flags : DriverFlags;
  104.     begin
  105.         writeln('TestGestaltCalls');
  106.         writeln;
  107.  
  108.         (* Install *)
  109.         rsrcName := '.Test';
  110.         err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  111.         CheckTestResult(err, 'install');
  112.  
  113.         (* Open *)
  114.         if err = noErr then begin
  115.             err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  116.             CheckTestResult(err, 'open');
  117.         end; (* if *)
  118.  
  119.         (* Gestalt On *)
  120.         if err = noErr then begin
  121.             err := TradDriverGestaltOn(refNum);
  122.             CheckTestResult(err, 'set Gestalt on');
  123.         end; (* if *)
  124.         if err = noErr then begin
  125.             err := TradGetDriverInformation(refNum, nil, @flags, nil, nil);
  126.             CheckTestResultBool((err = noErr) & TradDriverGestaltIsOn(flags), 'confirm Gestalt on');
  127.         end; (* if *)
  128.  
  129.         (* Gestalt Off *)
  130.         if err = noErr then begin
  131.             err := TradDriverGestaltOff(refNum);
  132.             CheckTestResult(err, 'set Gestalt off');
  133.         end; (* if *)
  134.         if err = noErr then begin
  135.             err := TradGetDriverInformation(refNum, nil, @flags, nil, nil);
  136.             CheckTestResultBool((err = noErr) & not TradDriverGestaltIsOn(flags), 'confirm Gestalt off');
  137.         end; (* if *)
  138.  
  139.         (* Remove *)
  140.         if err = noErr then begin
  141.             err := TradRemoveDriver(refNum, false);
  142.             CheckTestResult(err, 'remove');        
  143.         end; (* if *)
  144.  
  145.         writeln;
  146.     end; (* TestGestaltCalls *)
  147.     
  148.     
  149.     procedure TestInfoCalls;
  150.         var
  151.             err : OSErr;
  152.             refNumsCount : ItemCount;
  153.             i : ItemCount;
  154.             refNums : packed array [0..999] of DriverRefNum;
  155.             thisUnit : UnitNumber;
  156.             flags : DriverFlags;
  157.             name : Str255;
  158.             driverHeader : DRVRHeaderPtr;
  159.     begin
  160.         writeln('TestInfoCalls');
  161.         writeln;
  162.  
  163.         refNumsCount := 1000;
  164.         err := TradLookupDrivers(0, TradHighestUnitNumber, false, refNumsCount, @refNums[0]);
  165.         CheckTestResult(err, 'lookup drivers');        
  166.         if err = noErr then begin
  167.             for i := 0 to refNumsCount - 1 do begin
  168.                 err := TradGetDriverInformation(refNums[i], @thisUnit, @flags, @name, @driverHeader);
  169.                 if err = noErr then begin
  170.                     writeln('  refNum=', refNums[i]:1, ', unit=', thisUnit:1, ', flags=', (ord4(flags)), 
  171.                                     ', name=“', name, '”, addr=', ord4(driverHeader));
  172.                 end else begin
  173.                     writeln('  •••Error ', err:1, ' getting info for refnum ', refNums[i]:1, '.');
  174.                 end; (* if *)
  175.             end; (* for *)
  176.         end; (* if *)
  177.  
  178.         writeln;        
  179.     end; (* TestInfoCalls *)
  180.  
  181.     procedure TestAddLots;
  182.         var
  183.             err : OSErr;
  184.             refNum : DriverRefNum;
  185.             highChar : char;
  186.             lowChar : char;
  187.             rsrcName : Str255;
  188.     begin
  189.         writeln('TestAddLots');
  190.         writeln;
  191.         
  192.         (* Add 2 * 26 = 52) drivers to the unit table and open them all!
  193.                 Have to stop before 'T' otherwise our unique names clash with '.Test'.
  194.                 Note that this is limited by kMaximumNumberOfUnitTableEntries defined
  195.                 in TradDriverLoaderLib.c.
  196.         *)
  197.         
  198.         for highChar := 'A' to 'B' do begin
  199.             for lowChar := 'A' to 'Z' do begin
  200.                 rsrcName := '.Test';
  201.                 err := TradInstallDriverFromResource(0, @rsrcName, 48, TradHighestUnitNumber() + 1, refNum);
  202.                 if err = noErr then begin
  203.                     rsrcName[2] := highChar;
  204.                     rsrcName[3] := lowChar;
  205.                     err := TradRenameDriver(refNum, rsrcName);
  206.                 end; (* if *)
  207.                 if err = noErr then begin
  208.                     err := TradOpenInstalledDriver(refNum, fsRdWrPerm);
  209.                 end; (* if *)
  210.                 if err <> noErr then begin
  211.                     writeln('  •••Adding lots failed at ''', highChar, lowChar, ''' with error ', err:1, '.');
  212.                     exit(TestAddLots);
  213.                 end; (* if *)
  214.             end; (* for *)
  215.         end; (* for *)
  216.         
  217.         writeln('  Drivers added successfully!');
  218.         
  219.         (* Remove all of the added units. *)
  220.  
  221.         for highChar := 'A' to 'B' do begin
  222.             for lowChar := 'A' to 'Z' do begin
  223.                 rsrcName := '.Test';
  224.                 rsrcName[2] := highChar;
  225.                 rsrcName[3] := lowChar;
  226.                 err := OpenDriver(rsrcName, refNum);
  227.                 if err = noErr then begin
  228.                     err := TradRemoveDriver(refNum, false);
  229.                 end; (* if *)
  230.                 if err <> noErr then begin
  231.                     writeln('  •••Removing lots failed at ''', highChar, lowChar, ''' with error ', err:1, '.');
  232.                     exit(TestAddLots);
  233.                 end; (* if *)
  234.             end; (* for *)
  235.         end; (* for *)
  236.         
  237.         writeln('  Drivers removed successfully!');
  238.  
  239.         writeln;
  240.     end; (* TestAddLots *)
  241.     
  242. begin
  243.     writeln('Hello Cruel World!');
  244.     writeln;
  245.     writeln('TestTradDriverLoaderLib');
  246.     writeln('-- a test tool for the TradDriverLoaderLib library.');
  247.     writeln;
  248.     TestInstallOpenRemove;
  249.     TestGestaltCalls;
  250.     TestInfoCalls;
  251.     TestAddLots;
  252.     writeln('Done.  Press command-Q to Quit.');
  253. end. (* TestTradDriverLoaderLib *)
  254.